/*
*********************************************************************************************************
*
*                                           update_struct.h
*
* 文件名称 : update_struct.h
* 文件版本 : V0.01
* 文件描述 : 升级数据文件结构
* 编写人员 : HHL
* 修改人员 :
* 编修描述 : V0.01，时间2016.11.28
*********************************************************************************************************
*/

#ifndef  _UPDATE_STRUCT_H
#define  _UPDATE_STRUCT_H

/*升级数据包封装:
* 1,数据从PC到MCU
*|名称: |数据头| 间隔符  |数据编号|信息长度|偏移地址|功能类型| 数据 |校验和|
*|------|------|---------|--------|--------|--------|--------|------|------|
*|字节: |   5  |    1    |    1   |    2   |   2    |    1   |  n   |   1  |
*|内容: | 0x5a |0x3a(":")| 0-0xff |  d_len | offset |  d_fun | data |  sum |

*内容说明:
*数据头  : 连续的5个0x5a
*间隔符  : 0x3a,在发送数据头后发送一个间隔符,表明后面是需要记录的数据
*数据编号: 每条都指令/数据都有带有一个编号,0-0xff循环使用
*信息长度: 指后面data的字节长度,最小值=0,高前低后,整个数据的长度=d_len+7
*偏移地址: 数据的基地址,2字节,高前低后,基地址=(偏移地址<<16)
*功能类型: 参考hex文件格式的数据类型扩展
           |数据类型| 功能说明                                              |
           |--------|-------------------------------------------------------|
           |  00    | 记录数据 数据地址=基地址+偏移地址                     |
           |  01    | 文件结束                                              |
           |  02    | 计算扩展段基地址                                      |
           |  03    | 记录扩展段开始地址                                    |
           |  04    | 计算线性段基地址                                      |
           |  05    | 记录线性段开始地址                                    |
           |  06    | 上位机升级命令                                        |
           |  07    | 上位机重启命令                                        |
           |  08    | 擦除app数据区域                                       |
*数据    : 16进制数据,最小占4字节,
*检验和  : 从数据编号到data结束的校验和
*----------------------------------------------------------------------------
*2,数据从mcu到pc
*|名称: |数据头|信息长度|应答编号| 应答信息 |校验和|
*|------|------|--------|--------|----------|------|
*|字节: |   1  |    1   |    1   |     1    |   1  |
*|内容: | 0x5a |  0x02  | 0-0xff |    MSG   |  sum |

*内容说明:
*数据头  : 一个0x5a
*信息长度: 0x02
*应答编号: 对上位机发来的数据编号应答
*应答信息: MSG = BL_MCU2PC_ORDER
*检验和  : 前4字节的校验和
*/

//串口循环接受数据时间
#define LOOP_100_MS  (56604)  //16800:59.36
#define LOOP_10_MS   (5660)
#define LOOP_2_MS    (1132)
#define LOOP_1_MS    (566)

//APP程序的地址范围
#define APP_ADDR_HEAD  (STM32F407_FLASH_ADDT_SECTOR_1_HEAD)
#define APP_ADDR_END   (STM32F407_FLASH_ADDT_SECTOR_11_END)


//PC到MCU信息顺序
typedef enum _bl_pc2mcu_enum
{
    D_NBR,
    D_LEN_H,
    D_LEN_L,
    D_OFFSET_H,
    D_OFFSET_L,
    D_FUNC,
    D_DATA,
    D_end___,
}BL_PC2MCU;
//MCU到PC信息顺序
typedef enum _bl_mcu2pc_order
{
    ORDER_FALSE,     //命令执行失败
    ORDER_SUCCESS,   //        成功
    ORDER_REPE,      //        重复
    ORDER_CHECKERR,  //        校验错误
    ORDER_OFFSETERR, //        地址错误
    ORDER_end___,
}BL_MCU2PC_ORDER;
//MCU到PC信息顺序
typedef enum _bl_mcu2pc_data
{
    BL_HEAD,
    BL_LEN,
    BL_DNBR,
    BL_MSG,
    BL_SUM,
}BL_MCU2PC_DATA;
//f_up流程控制
typedef enum _bl_fg_up_
{
    BL_WAIT_MSG,
    BL_WAIT_ORDER,
    BL_ERASE_APP,
    BL_SWITCH_DATA,
    BL_WAIT_RST,
}BL_FG_UP;

#endif
